# 自定义过滤器
# 把普通函数注册为模板过滤器
from datetime import datetime

from django import template


def my_capfirst(value):
    return value.capitalize()


# 第一种注册的方法
# 大写L 注册器对象
register = template.Library()
# 第一个参数是过滤器的名称，第二个参数是过滤器的函数
register.filter('my_capfirst', my_capfirst)


# 第2种注册的方法
# 装饰器 定义调用时使用的方法名
@register.filter(name='my_default')
def my_default(value, arg):
    # 三目运算 判断传进来的值是否为空值 如果为空则返回自定义的内容 有值则返回原值
    return value if value else arg


# 自定义模实时时间板标签
# 如果没有自定义调用时的参数 则默认为'%Y-%m-%d %H:%M:%S'
@register.simple_tag()
def current_time(format_string):
    # 格式化操作 返回格式化后的时间 strftime=>字符串格式化 time.strftime() = stringformattime
    return datetime.now().strftime(format_string)


# 自定义发布时间的过滤器
@register.filter('time_since')
def time_since(value):
    """
    过滤器：对文章发布时间进行处理
    1-如果和当前的时间间隔小于1分钟 显示 刚刚
    2-如果大于1分钟小于1小时 显示 xx分钟前
    3-如果大于1小时小于1天 显示xx小时前
    4-如果大于1天小于30天 显示xx天前
    5-如果大于30天显示具体的发布时间
    :param value:  发布时间
    :return:  显示时间
    """
    now = datetime.now()
    # 计算时间间隔 把当前时间减去上传数据的时间 时间差单位 秒
    timestamp = (now - value).total_seconds()
    if timestamp < 60:
        return "刚刚"
    elif 60 < timestamp < 60 * 60:
        res = int(timestamp / 60)
        return f'{ res}分钟前'
    elif 60 * 60 < timestamp < 60 * 60 * 24:
        res = int(timestamp / (60 * 60))
        return f'{res}小时前'
    elif 60 * 60 * 24 < timestamp < 60 * 60 * 24 * 30:
        res = int(timestamp / (60 * 60 * 24))
        return f'{res}天前'
    else:
        return value.strftime("%Y-%m-%d %H:%M:%S")
